package com.demo.java.OD451_500.OD467;

import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【智能成绩表(C&D卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146352378
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 读取学生数量n和科目数量m
        int n = scanner.nextInt();
        int m = scanner.nextInt();

        // 存储每个科目的编号
        Map<String, Integer> us = new HashMap<>();
        List<Pair<String, List<Integer>>> people = new ArrayList<>();

        // 读取科目名称及其编号
        for (int i = 0; i < m; ++i) {
            String tmpStr = scanner.next();
            us.put(tmpStr, i + 1);  // 将科目名和对应的编号存入map
        }

        // 读取学生的姓名及成绩
        for (int i = 0; i < n; ++i) {
            String tmpStr = scanner.next();  // 学生姓名
            List<Integer> scores = new ArrayList<>(Collections.nCopies(m + 1, 0));  // 存储成绩和总分

            // 读取各科成绩并计算总分
            for (int j = 1; j <= m; ++j) {
                scores.set(j, scanner.nextInt());
            }
            scores.set(0, scores.subList(1, scores.size()).stream().mapToInt(Integer::intValue).sum());  // 总分

            // 将学生姓名和成绩（包括总分）存入列表
            people.add(new Pair<>(tmpStr, scores));
        }

        // 读取目标科目名称
        String targetName = scanner.next();

        // 根据目标科目的成绩排序
        people.sort((first, second) -> {
            // 获取目标科目的编号
            int index = us.containsKey(targetName) ? us.get(targetName) : 0;

            // 按成绩降序排列，如果成绩相同，则按名字升序排列
            return !first.second.get(index).equals(second.second.get(index)) ?
                    second.second.get(index).compareTo(first.second.get(index)) :
                    first.first.compareTo(second.first);
        });

        // 输出排序后的学生名单
        for (Pair<String, List<Integer>> e : people) {
            System.out.print(e.first + " ");
        }

        System.out.println();
    }

    // 用于存储学生姓名和成绩的辅助类
    static class Pair<F, S> {
        F first;  // 姓名
        S second; // 成绩

        public Pair(F first, S second) {
            this.first = first;
            this.second = second;
        }
    }
}